package com.edu.bhu.admin.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.edu.bhu.admin.util.AreaBean;
import com.edu.bhu.common.core.text.Convert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.edu.bhu.admin.mapper.PreAreaMapper;
import com.edu.bhu.admin.domain.PreArea;
import com.edu.bhu.admin.service.IPreAreaService;

/**
 * 地区Service业务层处理
 *
 * @author yutianyang
 * @date 2022-04-06
 */
@Service
public class PreAreaServiceImpl implements IPreAreaService
{
    @Autowired
    private PreAreaMapper preAreaMapper;

    /**
     * 查询地区
     *
     * @param areaId 地区主键
     * @return 地区
     */
    @Override
    public PreArea selectPreAreaByAreaId(Integer areaId)
    {
        return preAreaMapper.selectPreAreaByAreaId(areaId);
    }

    /**
     * 查询地区列表
     *
     * @param preArea 地区
     * @return 地区
     */
    @Override
    public List<PreArea> selectPreAreaList(PreArea preArea)
    {
        return preAreaMapper.selectPreAreaList(preArea);
    }

    /**
     * 查询地区列表，封装成AreaBean的树形结构
     *
     * @return 记录
     */
    @Override
    public List<AreaBean> selectAreaBeanList()
    {
        PreArea p1 = new PreArea();
        p1.setParentid(0);
        List<AreaBean> areaBeans = new ArrayList<>();
        List<PreArea> preAreas = preAreaMapper.selectPreAreaList(p1);
        for(PreArea p : preAreas){
            areaBeans.add(changeBean(p));
        }
        return recursive(areaBeans);
    }

    /**
     * 递归封装
     *
     * @return 记录
     */
    public List<AreaBean> recursive(List<AreaBean> ps1)
    {
        for(AreaBean p1 : ps1){
            if(p1.getDepth() != 3){
                //如果不是第三层层，递归查询
                List<AreaBean> areaBeans = new ArrayList<>();
                PreArea p2 = new PreArea();
                p2.setParentid(p1.getAreaId());
                List<PreArea> ps2 = preAreaMapper.selectPreAreaList(p2);
                for(PreArea p : ps2){
                    areaBeans.add(changeBean(p));
                }
                p1.setS(areaBeans);
                recursive(areaBeans);
            }
        }
        return ps1;
    }

    /**
     * 地区实体类做工具转换(仅转换名字、主键、深度)
     *
     * @return 记录
     */
    public AreaBean changeBean(PreArea preArea)
    {
        AreaBean areaBean = new AreaBean();
        areaBean.setN(preArea.getName());
        areaBean.setAreaId(preArea.getAreaId());
        areaBean.setDepth(preArea.getDepth());
        return areaBean;
    }

    /**
     * 新增地区
     *
     * @param preArea 地区
     * @return 结果
     */
    @Override
    public int insertPreArea(PreArea preArea)
    {
        return preAreaMapper.insertPreArea(preArea);
    }

    /**
     * 修改地区
     *
     * @param preArea 地区
     * @return 结果
     */
    @Override
    public int updatePreArea(PreArea preArea)
    {
        return preAreaMapper.updatePreArea(preArea);
    }

    /**
     * 批量删除地区
     *
     * @param areaIds 需要删除的地区主键
     * @return 结果
     */
    @Override
    public int deletePreAreaByAreaIds(String areaIds)
    {
        return preAreaMapper.deletePreAreaByAreaIds(Convert.toStrArray(areaIds));
    }

    /**
     * 删除地区信息
     *
     * @param areaId 地区主键
     * @return 结果
     */
    @Override
    public int deletePreAreaByAreaId(Integer areaId)
    {
        return preAreaMapper.deletePreAreaByAreaId(areaId);
    }
}
